-- 添加 Lua 模块搜索路径
local root_dir = vim.fn.fnamemodify(debug.getinfo(1, "S").source:sub(2), ":p:h")
package.path = root_dir .. "/lua/?.lua;" .. root_dir .. "/lua/?/init.lua;" .. package.path

-- 添加 runtime path 以便 Neovim 能找到模块
vim.opt.rtp:append(root_dir .. "/lua")

-- 设置便携式数据目录（集中存储在 files/repos 目录中）
local portable_data_dir = vim.fn.fnamemodify(root_dir, ":h") .. "/repos"
-- 添加 lazy.nvim 到 package.path
package.path = portable_data_dir .. "/lazy/lazy.nvim/lua/?.lua;" .. package.path

-- 添加内置的nvim-treesitter到runtime path
local self_dir = vim.fn.fnamemodify(root_dir, ":h") .. "/self"
vim.opt.rtp:prepend(self_dir .. "/nvim-treesitter")

vim.opt.runtimepath:append(portable_data_dir)

-- 确保数据目录存在
if not vim.uv.fs_stat(portable_data_dir) then
    vim.fn.mkdir(portable_data_dir, "p")
end

-- 设置 Neovim 的标准路径
vim.fn.setenv("LOCALAPPDATA", portable_data_dir)
vim.fn.setenv("XDG_DATA_HOME", portable_data_dir)
vim.fn.setenv("XDG_CONFIG_HOME", portable_data_dir)
vim.fn.setenv("XDG_STATE_HOME", portable_data_dir)
vim.fn.setenv("XDG_CACHE_HOME", portable_data_dir)

-- 重定向 Neovim 的 stdpath
local original_stdpath = vim.fn.stdpath
vim.fn.stdpath = function(dir)
    if dir == "data" or dir == "config" or dir == "cache" or dir == "state" then
        return portable_data_dir
    else
        return original_stdpath(dir)
    end
end

-- 设置日志记录
local log_file = vim.fn.expand("~/program/nvim-win64/share/nvim.log")
vim.opt.verbose = 15
vim.opt.verbosefile = log_file

-- 确保日志文件目录存在
local log_dir = vim.fn.fnamemodify(log_file, ":p:h")
if not vim.uv.fs_stat(log_dir) then
    vim.fn.mkdir(log_dir, "p")
end

-- 确保 lazy.nvim 被正确安装同设置
local lazy_install_path = portable_data_dir .. "/lazy/lazy.nvim"

-- 如果 lazy.nvim 目录存在但为空，先删除 it
if vim.uv.fs_stat(lazy_install_path) and vim.fn.empty(vim.fn.readdir(lazy_install_path)) == 1 then
    vim.fn.delete(lazy_install_path, "rf")
end

if not vim.uv.fs_stat(lazy_install_path) then
    vim.fn.mkdir(vim.fn.fnamemodify(lazy_install_path, ":h"), "p")
    
    vim.notify(
        "Clone lazy.nvim ...",
        "INFO",
        { annote = "[SimpleNvim]", key = "[SimpleNvim]" }
    )
    
    -- 克隆 lazy.nvim 到正确的位置，只克隆最新代码
    local result = vim.fn.system({
        "git",
        "clone",
        "--depth=1",
        "--filter=blob:none",
        "https://github.com/folke/lazy.nvim.git",
        lazy_install_path,
    })
    
    -- 检查克隆是否成功
    if vim.v.shell_error ~= 0 then
        vim.notify(
            "Failed to clone lazy.nvim: " .. result,
            "ERROR",
            { annote = "[SimpleNvim]", key = "[SimpleNvim]" }
        )
    end
end

-- 添加 lazy.nvim 到 runtimepath
vim.opt.rtp:prepend(lazy_install_path)

-- 加载配置模块
require("conf")
require("core")
require("utils")